#ifndef NETLIB_PROCESSINFO_H
#define NETLIB_PROCESSINFO_H

// 读取进程信息的函数

#include "StringPiece.h"
#include "Types.h"
#include "Timestamp.h"
#include <vector>
#include <sys/types.h>

namespace netlib
{

namespace ProcessInfo
{
    pid_t pid(); // 返回pid

    string pidString(); // 返回pid的字符串形式

    uid_t uid(); // 返回uid

    string username(); // 返回用户名

    uid_t euid(); // 返回euid

    Timestamp startTime(); // 开始计时

    int clockTicksPerSecond(); // 返回一秒的时钟数

    int pageSize(); // 返回内存页大小

    bool isDebugBuild(); // 是否开启调式模式

    string hostname(); // 返回本地主机的标准主机名

    string procname();

    StringPiece procname(const string& stat);

    string procStatus(); // 读取进程状态

    string procStat(); // 获取进程相关信息

    string threadStat(); // 获取线程相关信息

    string exePath(); // 执行路径，从根目录开始的绝对路径

    int openedFiles(); // 返回统计的进程打开的文件数目
    
    int maxOpenFiles(); // 查询进程允许打开的最大文件数

    struct CpuTime // CPU时间存储
    {
        double userSeconds;
        double systemSeconds;

        CpuTime() : userSeconds(0.0), systemSeconds(0.0) { }

        double total() const { return userSeconds + systemSeconds; }
    };

    CpuTime cpuTime(); // 获取CPU时间

    int numThreads(); // 返回线程数目

    std::vector<pid_t> threads(); // 返回线程id

} // namespace ProcessInfo end

} // namespace netlib end

#endif